#pragma once

#include "iostream"
#include "vector"
#include "algorithm"
#include "TypeDefin.h"

using namespace std;
/*HJJ QQ479287006
 *给定一个二叉树的 根节点 root，想象自己站在它的右侧，按照从顶部到底部的顺序，返回从右侧所能看到的节点值。

 

示例 1:



输入: [1,2,3,null,5,null,4]
输出: [1,3,4]
示例 2:

输入: [1,null,3]
输出: [1,3]
示例 3:

输入: []
输出: []
 

提示:

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/binary-tree-right-side-view
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */
//个人想法层次遍历取最右边的值
vector<int> rightSideView(TreeNode *root) {

    vector<int> ret;
    queue < TreeNode * > q;
    if (!root)
        return ret;
    q.push(root);

    while (!q.empty()) {
        int size = q.size();//注意这里要取size 因为动态在bian

        TreeNode *temp;
        for (int i = 0; i < size; ++i) {
            temp = q.front();
            q.pop();

            if (temp->left)
                q.push(temp->left);
            if (temp->right)
                q.push(temp->right);
        }

        ret.emplace_back(temp->val);

    }


    return ret;

}